package com.zpark.service.impl;

import com.zpark.mapper.IPersonMapper;
import com.zpark.pojo.Person;
import com.zpark.service.IPersonService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

/**
 * @PackageName: com.zpark.service
 * @ClassName: PersonServiceImpl
 * @Description:
 * @author: RZS
 * @date: 2024/4/22  12:05
 */
@Service
public class PersonServiceImpl implements IPersonService {

    @Autowired
    private IPersonMapper personMapper;


    // 根据主键查询数据
    @Override
    public Person getById(Integer id) {
        // selectByPrimaryKey方法: 根据主键查询数据
        return personMapper.selectByPrimaryKey(id);
    }

    @Override
    public List<Person> getAll() {
        // selectAll(): 查询所有数据
        return personMapper.selectAll();
    }

    @Override
    public List<Person> getByPerson(Person person) {
        // select方法：根据指定条件查询数据
        return personMapper.select(person);
    }

    @Override
    public void addPerson(Person person) {
        /*
            接口：InsertMapper<T>
            方法：int insert(T record);
            说明：保存一个实体，null的属性也会保存，不会使用数据库默认值

            接口：InsertSelectiveMapper<T>
            方法：int insertSelective(T record);
            说明：保存一个实体，null的属性不会保存，会使用数据库默认值
         */
        personMapper.insertSelective(person);
    }

    @Override
    public void removeById(Integer id) {
        /*
            接口：DeleteByPrimaryKeyMapper<T>
            方法：int deleteByPrimaryKey(Object key);
            说明：根据主键字段进行删除，方法参数必须包含完整的主键属性
         */
        personMapper.deleteByPrimaryKey(id);
    }

    @Override
    public void removePerson(Person person) {
        /*
            接口：DeleteMapper<T>
            方法：int delete(T record);
            说明：根据实体属性作为条件进行删除，查询条件使用等号
         */
        personMapper.delete(person);
    }

    @Override
    public void changePerson(Person person) {
        /*
            接口：UpdateByPrimaryKeyMapper<T>
            方法：int updateByPrimaryKey(T record);
            说明：根据主键更新实体全部字段，null值会被更新

            接口：UpdateByPrimaryKeySelectiveMapper<T>
            方法：int updateByPrimaryKeySelective(T record);
            说明：根据主键更新属性不为null的值

            接口：UpdateByExampleMapper<T>
            方法：int updateByExample(T record, Object example);
            说明：根据Example条件更新实体`record`包含的全部属性，null值会被更新

            接口：UpdateByExampleSelectiveMapper<T>
            方法：int updateByExampleSelective(T record, Object example);
            说明：根据Example条件更新实体`record`包含的不是null的属性值
         */
        personMapper.updateByPrimaryKeySelective(person);
    }
}
